package controler.algorithms.nnbp;

/** 
 * @file INeuralNetwork.java  
 * 
 **/

/**
 *    Interfejs sieci neuronowej.
 *  
 *  Interjejs, ktory jest implementowany przez siec neuronowa. Zawiera podstawowe metody potrzebne do dzialania sieci.
 */

public interface INeuralNetwork {
	
	/**
     *   Metoda odpowiedzialna za przetworzenie sygnalu wejsciowego przez siec.
     * 
     * Metoda dostaje na wejsciu wektor wejsciowy, czyli przeskalowane cechy, a nastepnie oblicza pobudzenie w kolejnych neuronach, a takze wynik calej sieci.
     * @param in wektor wejsciowy, przeskalowane cechy.
     * 
     */
    void execution(double[] in);
    
    /**
     *   Metoda odpowiedzialna za przetworzenie sygnalu wejsciowego przez siec, a takze obliczenie bledow i odpowiednia zmiane wag.
     * 
     * Metoda dostaje na wejsciu wektor wejsciowy, czyli przeskalowane cechy oraz oczekiwane wyjscia sieci. Oblicza pobudzenie w kolejnych neuronach,
     * a takze wynik calej sieci. Oblicza blad dla kazdego neuronu i odpowiednio koryguje wagi.
     * @param in wektor wejsciowy, przeskalowane cechy.
     * @param expectedOutputs oczekiwane wyjscie sieci.
     * @see execution()
     */
    void propagation(double[] in, double[] expectedOutputs);
    
    /**
     *   Metoda zwracajaca aktulny blad srednio kwadratowy wyjscia.
     * 
     * Metoda zwraca aktualny blad srednio kwadratowy wyjscia obliczany wg tego co siec zwraca, a tego co powinno byc.
     * @param expectedOutputs oczekiwane wyjscie sieci.
     * @return Aktualny blad siednio kwadratowy.
     */
    double mse(double[] expectedOutputs);
    
    /**
     *   Metoda zwracajaca aktulne wyjscie sieci o danym numerze.
     * 
     * Metoda zwraca aktualne wyjscie sieci o danym numerze zaczynajac od 0.
     * @param number wyjscie sieci, ktore chemy otrzymac, zaczynajac od 0.
     * @return Wartosc na danym wyjsciu sieci.
     */
    double getOutput(int number);
    
    /**
     *   Metoda zwracajaca aktulne wyjscia sieci.
     * 
     * Metoda zwraca aktualne wyjscia sieci jako tablice.
     * @return Tablica wartosci na wyjsciach sieci.
     */
    double[] getOutputs();

}
